Consumptive_Use_Dataset = (awaitFileAttachment("Data/WaterYear_Annual_Use.csv").csv()).map(d =>({...d,Date:newDate(d.Date),Water_Year:String(d.Water_Year),State:String(d.State),Category:String(d.Category),Region:String(d.Region),Apportionment_Countable:String(d.Apportionment_Countable),Consumptive_Use:parseFloat((+d.Consumptive_Use).toFixed(2)),Consumptive_Use_MAF:parseFloat((+d.Consumptive_Use_MAF).toFixed(2))}))WY_State_Use = (awaitFileAttachment("Data/WaterYear_State_Sum.csv").csv()).map(d =>({...d,Water_Year:String(d.Water_Year),Date:newDate(d.Date),Consumptive_Use_MAF:parseFloat((+d.Consumptive_Use_MAF).toFixed(2))}))WY_Region_Use = (awaitFileAttachment("Data/WaterYear_Region_Sum.csv").csv()).map(d =>({...d,Water_Year:String(d.Water_Year),Date:newDate(d.Date),Consumptive_Use_MAF:parseFloat((+d.Consumptive_Use_MAF).toFixed(2))}))WY_Basin_Use = (awaitFileAttachment("Data/WaterYear_Basin_Sum.csv").csv()).map(d =>({...d,Water_Year:String(d.Water_Year),Date:newDate(d.Date),Consumptive_Use_MAF:parseFloat((+d.Consumptive_Use_MAF).toFixed(2))}))Supply = (awaitFileAttachment("Data/Supply.csv").csv()).map(d =>({...d,Water_Year:String(d.Water_Year),Date:newDate(d.Date),Supply_Acre_Feet:+d.Acre_Feet,Supply_MAF:parseFloat((+d.Million_Acre_Feet).toFixed(2)),Upper_Basin_Supply:+d.Upper_Basin_Supply,// Made by subtracting 8.25 maf (7.5 to LB and half of 1.5 to Mexico) to reflect legal supply available to Upper BasinTen_Year_Avg:parseFloat((+d.Ten_Year_Average).toFixed(2)),UB_10yr_Avg:parseFloat((+d.UB_10yr_Avg).toFixed(2))})).sort((a, b) => a.Date- b.Date)
Total Basin Usage
Consumptive water use* in the Colorado River basin has been roughly 13 to 14 million acre-feet annually over the past 20 years, declining from a high in the 1990s of 16-17maf. This use is split between three main regions: the Upper Basin (Colorado, Wyoming, New Mexico, Utah), the Lower Basin (California, Arizona, Nevada) and Mexico.
The Upper and Lower Basins are allocated 7.5maf each but the Lower Basin is also apportioned an additional 1maf in years of surplus supply. Mexico is apportioned 1.5maf a year through a 1944 treaty with the US for a total system allocation of 16.5maf.
Data for consumptive use is provided by the US Bureau of Reclamation. For data on Mexico the USBR tracks total deliveries and not exact consumptive use. Therefore, excess flood waters during the unusually wet 1980s and 1990s are reflected in the data as deliveries but true consumptive use was likely closer to the 1.5maf the region was accustomed to using.
As discussed further down, evaporation from Lower Basin reservoirs are not counted towards its consumptive use total but are included in the chart below to illustrate scale of evaporative losses. Lake Powell is also included as a separate category because Upper Basin states share responsibility for the reservoir proportionately. Upper Basin reservoir evaporation is counted towards Upper Basin consumptive use totals.
*Water that is “consumed” is lost as evaporation and transpiration from plants and is different from “withdrawals”, which return part of the water to streams and aquifers for other users.
{// Arizona Upper Basin consumption is exluded for now to simplify the graph and processing but needs to be wrapped into all of Arizona. Amounts negligble so taking quickest route to remove for nowconst plot_data = WY_State_Use.filter(d =>!(d.State==="Arizona"&& d.Region==="Upper Basin") )return Plot.plot({width: width,height:500,y: {grid:true,label:"Consumptive Use in Millions of Acre-Feet" },color: { legend:true },marks: [ Plot.ruleY([16.5], {strokeDasharray:"4,4"}), Plot.text(["Total Apportioned Water - 16.5maf"], {frameAnchor:"top",textAnchor:"middle",y:17.2,x:newDate("2010-01-01")}), Plot.lineY(Basin_wEvap, { x:"Date",y:"Consumptive_Use_MAF",stroke:"black",channels: {"Water Year": { value: d => d.Water_Year },"Total Use (MAF)": { value: d => d.Consumptive_Use_MAF } },tip: {anchor:"top",format: {x:false,y:false,y1:false,y2:false,fill:false,"Water Year":true,"Total Use (MAF)":true } } }), Plot.areaY(plot_data, Plot.stackY({x:"Date",y:"Consumptive_Use_MAF",fill:"State",order:"-sum",// Orders largest at the bottomfillOpacity:0.7,channels: {"State": { value: d => d.State },"Water Year": { value: d => d.Water_Year },"Consumptive Use (MAF)": { value: d => d.Consumptive_Use_MAF } },tip: {anchor:"top",format: {x:false,y:false,y1:false,y2:false,fill:false,"State":true,"Water Year":true,"Consumptive Use (MAF)":true } } })) ] })}
Significant differences between the Upper and Lower Basin affect how their consumptive use is calculated. The Upper Basin Compact of 1948 stipulates that evaporative losses from reservoirs count towards the consumptive use of the state the reservoir is in (Lake Powell losses are shared proportionately among the states). No such provision applies to the Lower Basin and so roughly 800,000af of consumptive use are not accounted for.
The chart below illustrates how the Lower Basin has consistently used above it’s annual allocation even into the 2020s if evaporative losses are inluded. If they are excluded the Lower Basin’s response the current drought is made clearer as uses drop below 7.5maf in 2003.
Additionally, Arizona’s ~1.1maf consumption from the Gila River is not reflected in Lower Basin figures because it is not legally considered part of the Lower Basin’s apportionment, recognized by the 1963 Supreme Court ruling in Arizona v. California as Arizona’s exclusive right.
Upper Basin use has rarely exceeded 4.5maf owning to a combination of climate, terrain and infrastructure. The Lower Basin has a longer and hotter growing season and larger areas suitable for irrigation. Meanwhile, the Upper Basin largely lacks the large reservoir infrastructure of the Lower Basin, making less efficient flood irrigation more common.
Spikes in deliveries in Mexico reflect release of excess flood water during periods when Lakes Mead and Powell were near full capacity.
The distirbution of Upper Basin water is based on the Upper Colorado River Basin Compact of 1948, which established a proportional distribution.
Colorado: 51.75% - up to 3,881,250af
Utah: 23% - up to 1,725,000af
Wyoming: 14% - up to 1,050,000af
New Mexico: 11.25% - up to 843,750af
State apportionents apply to tributaries and reservoir evaporation, unlike in the Lower Basin. No Upper Basin state has ever used their full apportionment.
{const show_apportionment_lines = upper_basin_options.includes("Show Apportionment Lines")const apportionment_marks = show_apportionment_lines ? [ Plot.ruleY([3.88], { strokeDasharray:"4,4",stroke:"red" }), Plot.ruleY([1.725], { strokeDasharray:"4,4",stroke:"green" }), Plot.ruleY([1.05], { strokeDasharray:"4,4",stroke:"orange" }), Plot.ruleY([0.843], { strokeDasharray:"4,4",stroke:"purple" })//,// Plot.text(["Colorado"], { frameAnchor: "bottom", textAnchor: "right", y: 3.9, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) }),// Plot.text(["Utah"], { frameAnchor: "bottom", textAnchor: "right", y: 1.8, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) }),// Plot.text(["Wyoming"], { frameAnchor: "bottom", textAnchor: "right", y: 1.1, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) }),// Plot.text(["New Mexico"], { frameAnchor: "bottom", textAnchor: "right", y: 0.9, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) }) ] : []// Adjust y domain based on checkbox - expand to fit reference lines when shownconst y_max = show_apportionment_lines?Math.max(d3.max(Upper_Basin_States, d => d.Consumptive_Use_MAF),4.2) // 4.2 gives headroom above 3.88: d3.max(Upper_Basin_States, d => d.Consumptive_Use_MAF)return Plot.plot({width: width,height:500,//marginRight: 100,y: {grid:true,label:"Consumptive Use (MAF)",domain: [0, y_max] },x: { label:"Date" },color: {domain: ["Colorado","Utah","Wyoming","New Mexico"],range: ["red","green","orange","purple"],legend:true },marks: [ Plot.lineY(Upper_Basin_States, { x:"Date",y:"Consumptive_Use_MAF",stroke:"State" }), Plot.tip(Upper_Basin_States, Plot.pointerX({ x:"Date",y:"Consumptive_Use_MAF" })),...apportionment_marks ] })}
A challenge for the Upper Basin is that it must supply the Lower Basin and Mexico with a minimum amount of supply while facing much of the brunt of early snow melt and declining supplies. This is reflected in inter-state negotiations as a common refrain that the Upper Basin is already forced to make cuts in low supply years while the Lower Basin can continue to draw from Lakes Mead and Powell at consistent amounts.
The chart below shows consumptive use in the Upper Basin as reported by the Bureau of Reclamation against supply available to it. Supply is calculated by suptracting 8.5maf (7.5 to the lower basin and 0.75 to Mexico) from USBR’s estimates of natural flow at Lee Ferry, which serves as an estimate of the naturally available supply in water for apportionment to users. While not perfect, Lee Ferry sits below all major tributaries into the Colorado River before the Gila River and has a long history of use for supply modeling.
Upper Basin Use vs. Supply
{const UB_Total = WY_Region_Use.filter(d => d.Region==="Upper Basin").sort((a, b) => a.Date- b.Date)const UB_Supply_Plot = Plot.plot({width: width,height:500,color: {legend:true,domain: ["Consumptive Use","Upper Basin Supply","Supply 10yr Average"],range: ["black","blue","#427FFF"] },y: {grid:true,label:"Millions of Acre-Feet",domain: [d3.min(Supply, d => d.Upper_Basin_Supply), d3.max(Supply, d => d.Upper_Basin_Supply)] },x: { label:"Water Year",domain: [d3.min(UB_Total, d => d.Date), d3.max(UB_Total, d => d.Date)] },marks: [ Plot.lineY(UB_Total, { x:"Date",y:"Consumptive_Use_MAF",stroke:"black",channels: {"Water Year": { value: d => d.Water_Year },"Total Use (MAF)": { value: d => d.Consumptive_Use_MAF },"Upper Basin Supply": { value: d => d.Upper_Basin_Supply },"Supply 10yr Avg": { value: d => d.UB_10yr_Avg } },tip: {anchor:"top",format: {x:false,y:false,y1:false,y2:false,fill:false,"Water Year":true,"Total Use (MAF)":true,"Upper Basin Supply":true,"Supply 10yr Avg":true } } }), Plot.lineY(Supply, { x:"Date",y:"Upper_Basin_Supply",stroke:"blue",channels: {"Water Year": { value: d => d.Water_Year },"Upper Basin Supply": { value: d => d.Upper_Basin_Supply },"Supply 10yr Avg": { value: d => d.UB_10yr_Avg } },tip: {anchor:"top",format: {x:false,y:false,y1:false,y2:false,fill:false,"Water Year":true,"Upper Basin Supply":true,"Supply 10yr Avg":true } } }), Plot.lineY(Supply, { x:"Date",y:"UB_10yr_Avg",stroke:"#427FFF",strokeDasharray:"4,4",strokeOpacity:0.5 }) ] })return UB_Supply_Plot}
Annual Upper Basin supply demonstrates the extreme swings in natural flows of the Colorado River, sometimes swinging so low that the Upper Basin cannot supply its obligations for that year without Lakes Mead and Powell, reflected in negative values. This is why the Upper Basin’s obligation to the Lower Basin is measured in a 10-year rolling sum.
These swings in supply result in sharp drops in Upper Basin usage, reaching upwards of 1 million acre-feet. However, the long term trend for the Upper Basin does not show any sign of a systematic reduction in use. Average annual consumption during the 1980s, some of the wettest years in the past century, was 4.3maf while average annual consumption between 2020 and 2024, some of the driest years, was 4.4maf.
The charts below demonstrate that irrigated agriculture is by far the largest consumer of Colorado River water. Outside of Colorado, where trans-basin exports to Front Range cities consumes a large portion of water, municipal and industrial consumptive use is quite small.
Significantly, agricultural water use does not show any long term trends down as supply diminishes. In fact, in most states agricultural use is increasing over time.
Upper Basin Use by Category
{const UB_Use_Categories = Consumptive_Use_Dataset.filter(d => d.Region==="Upper Basin"&& d.State!=="Lake Powell"&& d.State!=="Arizona"&& d.Category!=="Import"&& d.Water_Year!=="2025" ).sort((a, b) => a.Date- b.Date)return Plot.plot({width: width,height:800,marginRight:100,color: {legend:true, },y: {grid:true,label:"Millions of Acre-Feet",domain: [0,2.6] },x: { label:"Water Year",domain: [d3.min(UB_Use_Categories, d => d.Date), d3.max(UB_Use_Categories, d => d.Date)] },marks: [ Plot.frame(), Plot.areaY(UB_Use_Categories, Plot.stackY({x:"Date",y:"Consumptive_Use_MAF",fy:"State",fill:"Category",order:"-sum",// Orders largest at the bottomfillOpacity:0.7,channels: {"Category": { value: d => d.Category },"Water Year": { value: d => d.Water_Year },"Consumptive Use (MAF)": { value: d => d.Consumptive_Use_MAF } },tip: {anchor:"top",format: {x:false,y:false,y1:false,y2:false,fill:false,"Category":true,"Water Year":true,"Consumptive Use (MAF)":true } } })) ] })}